Ознакомительная версия. Доступно 12 страниц из 59
и редактируем.
Значение узла и будет новым отредактированным значением.
Помимо присоединения слушателя, модель данных DefaultTreeModel позволяет вставить узел в дерево с помощью метода insertNodeInto и удалить узел из дерева с помощью метода removeNodeFromParent.
За редактирование дерева отвечает редактор TreeCellEditor, который можно получить методом getCellEditor.
TreeCellEditor – это интерфейс.
Реализация этого интерфейса по умолчанию – это класс DefaultTreeCellEditor, к объекту которого можно присоединить слушатель редактирования узла CellEditorListener.
В обработчике этого слушателя editingStopped окончания редактирования, также можно отследить новое значение узла дерева.
Свой редактор DefaultTreeCellEditor можно создать с помощью конструктора, в котором указывается дерево, объект DefaultTreeCellRenderer, отвечающий за отображение дерева, и редактор DefaultCellEditor, отвечающий за редактирование узла дерева.
В свою очередь редактор DefaultCellEditor можно создать на основе флажка, выпадающего списка и текстового поля (по умолчанию).
Здесь показан пример создания редактора дерева, использующего для редактирования узла выпадающий список.
Если для создания дерева не устраивает предоставленная по умолчанию модель данных DefaultTreeModel, вы создаете свою, реализуя интерфейс TreeModel.
Если не устраивает предоставленный по умолчанию редактор, вы создаете свой, реализуя интерфейс TreeCellEditor.
Если не устраивает отображение узлов, вы реализуете интерфейс TreeCellRenderer.
И вам самостоятельное задание – написать дерево с контекстным меню, которое позволяет добавить и удалить узлы дерева.
JFileChooser
Компонент JFileChooser обеспечивает диалоговое окно, с помощью которого пользователь может выбрать файл, который затем будет использоваться приложением.
Компонент JFileChooser создается с помощью конструктора, в котором можно указать изначально открывающийся каталог.
По умолчанию открывается каталог Документы пользователя.
По умолчанию, пользователь может выбирать только файлы.
Чтобы пользователь смог выбрать также и каталог, нужно вызвать метод setFileSelectionMode с константой FILES_AND_DIRECTORIES.
По умолчанию JFileChooser не отображает скрытые файлы.
Чтобы установить их отображение, нужно вызвать метод setFileHidingEnabled (false).
По умолчанию, пользователь может выбрать только один файл.
Возможность выбора нескольких файлов задается методом setMultiSelectionEnabled (true).
По умолчанию JFileChooser показывает все файлы в выбранном каталоге.
Ограничить отображение отдельными типами файлов, можно с помощью фильтра файлов.
Фильтр файлов представлен абстрактным классом FileFilter.
Можно напрямую реализовать этот класс, определив его метод accept, принимает ли фильтр этот файл, и метод getDescription, описание фильтра.
Или можно использовать готовую реализацию – класс FileNameExtensionFilter.
Фильтр FileNameExtensionFilter создается с помощью конструктора, в котором указывается отображаемое описание фильтра и набор допустимых расширений файлов.
Полученный фильтр устанавливается с помощью метода addChoosableFileFilter.
Можно создать несколько фильтров и добавить их в JFileChooser.
Тогда пользователь сможет выбирать фильтр в выпадающем списке.
По умолчанию в JFileChooser добавляется фильтр All Files.
Чтобы его убрать, используется метод setAcceptAllFileFilterUsed (false).
В компонент JFileChooser можно добавить Swing компонент с помощью метода setAccessory.
Например, окно предварительного просмотра выбранного файла.
В этом примере мы создаем класс, расширяющий класс JComponent, в котором мы присоединяем слушатель изменения свойства к JFileChooser.
При выборе файла обработчик слушателя извлекает информацию о выбранном файле, и она отображается с помощью метода paint этого пользовательского компонента.
JTable
Компонент JTable обеспечивает отображение таблицы данных, при необходимости позволяя пользователю редактировать данные.
Компонент JTable использует модель данных таблицы TableModel для управления фактическими данными таблицы, модель TableColumnModel, содержащую список столбцов таблицы, и модель выбора строк таблицы ListSelectionModel.
Компонент JTable использует редактор ячеек таблицы TableCellEditor, рендерер TableCellRenderer для отображения ячеек на экране, класс TableColumn для хранения информации о свойствах каждого столбца.
Видно, что архитектура компонента JTable довольно сложная.
Это сделано для максимального абстрагирования, чтобы пользователи Swing могли легко получить доступ, изменить и расширить все функциональные возможности.
Для создания таблицы предлагается несколько конструкторов.
Конструктор по умолчанию создает пустую таблицу без строк и столбцов с пустыми моделями данных.
Конструктор JTable (int rows, int columns) формирует пустую редактируемую таблицу с заданным числом строк и столбцов с моделью данных по умолчанию, которая предполагает хранить в таблице объекты типа Object в виде вектора типа Vector, состоящего из векторов.
Конструктор JTable (Object [] [] data, Object [] colNames) создает таблицу, заполненную объектами data.
Параметр colNames содержит имена столбцов таблицы.
Все строки массива data должны содержать столько же элементов, сколько существует в массиве colNames.
Конструктор JTable (Vector data, Vector colNames) делает то же самое, но параметры заданы векторами.
Преимущество этих конструкторов заключается в том, что они просты в использовании.
Однако эти конструкторы также имеют недостатки.
Они автоматически делают каждую ячейку доступной для редактирования.
Они обрабатывают все типы данных одинаково, как строки.
Например, если столбец таблицы имеет логические данные, таблица может отображать данные в виде флажка.
Однако, если вы используете один из этих двух простых конструкторов JTable, ваши логические данные отображаются в виде строки.
Кроме-того, при изменении данных, придется заново создавать таблицу, с новыми массивами.
Остальные конструкторы определяют таблицу с заранее заданными моделями данных.
Как уже было сказано, самый простой способ создать таблицу – это использовать конструктор на основе массивов данных, указав напрямую данные и заголовки столбцов.
Надо заметить, что заголовки столбцов появляются на экране, только если таблица заключена в панель JScrollPane.
Если при этом у столбцов не заданы имена, то они помечаются буквами A, B, C и т. д., как принято в электронных таблицах.
Если вы используете таблицу без панели прокрутки, вы должны получить компонент заголовка таблицы и добавить его в контейнер.
При вызове метода setFillsViewportHeight (true), таблица использует всю высоту контейнера, даже если таблица не имеет достаточного количества строк для использования всего вертикального пространства.
По умолчанию все столбцы в таблице начинаются с равной ширины и автоматически заполняют всю ширину таблицы.
Чтобы настроить начальную ширину столбцов, вы можете вызвать метод setPreferredWidth для каждого столбца таблицы.
Столбец таблицы получается из модели TableColumnModel, которая получается методом getColumnModel.
Разумеется, эта настройка будет действовать в рамках общей ширины таблицы.
По умолчанию таблица поддерживает выбор пользователем одной или нескольких строк.
Режим выбора устанавливается методом setSelectionMode на основе констант MULTIPLE_INTERVAL_SELECTION, SINGLE_INTERVAL_SELECTION, и SINGLE_SELECTION.
Обработать выбор пользователя, можно присоединив слушателя к модели выбора ListSelectionModel.
Эта модель получается методом getSelectionModel для таблицы.
По умолчанию вы получаете модель выбора строк.
Чтобы получить модель выбора столбцов, вы должны сначала вызвать метод getColumnModel, а затем метод getSelectionModel.
Также, по умолчанию, обработчик слушателя вызывается дважды – при нажатии клавиши мыши и при ее отпускании.
Чтобы избежать множественного вызова обработчика слушателя, используется метод getValueIsAdjusting, который проверяет, является ли событие частью одной и той же цепочки.
В обработчике слушателя мы используем методы getSelectedRows и getSelectedColumns таблицы, чтобы получить значение выбранной ячейки.
Как уже было сказано, по умолчанию, пользователь выбирает строку.
Чтобы пользователь мог выбрать одну ячейку, используется метод setCellSelectionEnabled (true).
Выбор столбца пользователем также можно отследить с помощью слушателя события изменения модели столбца TableColumnModel,
Ознакомительная версия. Доступно 12 страниц из 59